﻿using System;

namespace UploadClient.Interfaces
{
    /// <summary>
    /// Serversettings
    /// </summary>
    public interface IServerSettings : IEquatable<IServerSettings>
    {
        #region Setting params

        /// <summary>
        /// The upload url.
        /// </summary>
        string Host { get; set; }
        
        /// <summary>
        /// The username.
        /// </summary>
        string Username { get; set; }

        /// <summary>
        /// The password.
        /// </summary>
        string Password { get; set; }

        /// <summary>
        /// Additional upload path.
        /// </summary>
        string Dir { get; set; }

        /// <summary>
        /// The connection method.
        /// </summary>
        bool Passive { get; set; }

        /// <summary>
        /// The port for the upload process.
        /// </summary>
        int Port { get; set; }

        #endregion

        /// <summary>
        /// Check if Host, Username & Password is set.
        /// </summary>
        bool isComplete();

        /// <summary>
        /// Returns a hash code from the params.
        /// </summary>
        /// <returns>integer</returns>
        new int GetHashCode();

        /// <summary>
        /// Compares two server settings objects.
        /// </summary>
        /// <param name="obj">Serversettings.</param>
        /// <returns>A boolean.</returns>
        new bool Equals(object obj);

        /// <summary>
        /// Compare Settings, return true if they are equal.
        /// </summary>
        /// <param name="settings">Settings to comapre.</param>
        /// <returns>Boolean.</returns>
        new bool Equals(IServerSettings settings);
    }
}
